<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>

    var list = [1, 4, 7, 2, 5, 8];

    // forEach
    // 1. 接收一个回调函数 -> 回调函数可以有三个参数  item index array
    // 2. 每次遍历数组时都会执行一次回调函数
    // 3. 每次回调函数执行完毕 都会有返回值 => forEach没有接收返回的结果

    // list.forEach(function(item,index,array){
    //     console.log(item,index,array);
    // })

    // 对 for循环进行封装  -> 指定既定的函数
    /* function myEach(){  // 遍历数组 list, 每循环一次 执行一次函数fn 

        // 函数嵌套版   => 遍历的数组list 和每次循环时执行的函数fn 都是定死的  => 不够灵活
        let list = [7,4,1,8,5,2];

        let fn = function(item,index,array){  // 三个形参
            console.log(item,index,array);
        }

        // 遍历数组
        for(var i=0;i<list.length;i++){
            var a = list[i]; // 循环的当前元素
            var b = i;  // 循环的当前下标
            var c = list;  // 原数组
            fn(a,b,c);  // 函数调用 => 三个实际参数
        }
    }
    myEach(); */

    // 模拟封装forEach
    /* function myEach(list,fn) {  // 遍历数组 list, 每循环一次 执行一次函数fn 

        // 函数嵌套版   => 遍历的数组list 和每次循环时执行的函数fn 都是定死的  => 不够灵活
        // let list = [7, 4, 1, 8, 5, 2];

        // let fn = function (item, index, array) {  // 三个形参
        //     console.log(item, index, array);
        // }

        // 遍历数组
        for (var i = 0; i < list.length; i++) {
            var a = list[i]; // 循环的当前元素
            var b = i;  // 循环的当前下标
            var c = list;  // 原数组
            fn(a, b, c);  // 函数调用 => 三个实际参数
        }
    }
    var res = myEach(["a","b","c"],function(item){
        console.log(item);
    });
    console.log(res); */



    function myMap(list, fn) {  // 遍历数组 list, 每循环一次 执行一次函数fn 

        // 函数嵌套版   => 遍历的数组list 和每次循环时执行的函数fn 都是定死的  => 不够灵活
        // let list = [7, 4, 1, 8, 5, 2];

        // let fn = function (item, index, array) {  // 三个形参
        //     console.log(item, index, array);
        // }

        // 遍历数组
        var arr = [];
        for (var i = 0; i < list.length; i++) {
            var a = list[i]; // 循环的当前元素
            var b = i;  // 循环的当前下标
            var c = list;  // 原数组
            var res = fn(a, b, c);  // 函数调用 => 三个实际参数
            arr.push(res);
        }
        return arr;
    }
    var res = myMap([1, 4, 7], function (item) {
        console.log(item);
        return item * 10; // 扩大十倍
    });
    console.log(res);








</script>

</html>